#include "queue.h"

// 初始化队列
void initQueue(Queue *q) {
    q->front = 0;
    q->rear = 0;
    q->size = 0;
}

// 判断队列是否为空
bool isEmpty(Queue *q) {
    return q->size == 0;
}

// 判断队列是否已满
bool isFull(Queue *q) {
    return q->size == QUEUE_SIZE;
}

// 入队操作，队列满时挤出最早元素
bool enqueue(Queue *q, uint8_t value) {
    if (isFull(q)) {
        // 队列已满，移除队头元素
        q->front = (q->front + 1) % QUEUE_SIZE;
        q->size--;
    }
    q->data[q->rear] = value;
    q->rear = (q->rear + 1) % QUEUE_SIZE;
    q->size++;
    return true;  // 入队成功
}

// 出队操作
bool dequeue(Queue *q, uint8_t *value) {
    if (isEmpty(q)) {
        return false;  // 队列为空，出队失败
    }
    *value = q->data[q->front];
    q->front = (q->front + 1) % QUEUE_SIZE;
    q->size--;
    return true;  // 出队成功
}

// 获取队列当前元素数量
int getQueueSize(Queue *q) {
    return q->size;
}
